home *** CD-ROM | disk | FTP | other *** search
/ Merciful 5 / Merciful - Disc 5.iso / software / p / pcqpascalv1.2d.lha / Examples2 / KillX / KillJeff.p < prev    next >
Encoding:
Text File  |  1997-05-06  |  4.7 KB  |  169 lines

  1. Program KillJeff;
  2.  
  3. { ***************************************************************************
  4.   *                                                                         *
  5.   *                       KillJeff Version 1.1                              *
  6.   *                                                                         *
  7.   * Löscht Butonic-JeffV3.00-Virus von der Disk und (teilweise) aus dem     * 
  8.   * Speicher.                                                               *
  9.   * Geschrieben am 6.12.1992. Compiliert mit PCQ-Pascal 1.2b.               *
  10.   * Dieses Programm ist Freeware. Wenn teile des sourcecodes in eigenen     *
  11.   * Programmen benutzt werden sollte angegeben werden das sie von mir sind. *
  12.   *                                                                         *
  13.   * Meine Adresse:                                                          *
  14.   *                                                                         *
  15.   *  Andreas Tetzl                                                          *
  16.   *  Liebethaler Str.18                                                     *
  17.   *  O-8300, Pirna-Copitz                                                   *
  18.   *                                                                         *
  19.   ***************************************************************************
  20. }
  21.  
  22. {$I "Include:Utils/Stringlib.i" }
  23. {$I "Include:Libraries/Dos.i"   }
  24. {$I "Include:Exec/Execbase.i"   }
  25. {$I "Include:Utils/Parameters.i"}
  26.  
  27. VAR     F,F2                :    Text;
  28.     Zeile,Antwort,
  29.     Device,
  30.     Datei,JeffPfad,
  31.      startupPfad        :    String;
  32.     DM,Startup,OK        :    Boolean;
  33.     Fib                :     FileInfoBlockPtr;
  34.     F_Lock            :     Filelock;
  35.     Size                :     Integer;
  36.     ExecPtr            :     Execbaseptr;
  37.  
  38.  
  39. Procedure FileLoeschen;
  40. Begin
  41.   If DeleteFile(JeffPfad)=TRUE then Begin
  42.     Write("VirusFile gelöscht\n");
  43.   End Else Begin
  44.     Write("Kann Virus nicht löschen\n");
  45.   End;
  46. End;
  47.  
  48. Procedure StartupLoeschen;   { Erste Zeile der Startup-Sequence löschen }
  49. Begin
  50.   If Reopen(StartupPfad,F) then Begin
  51.     Readln(F,Zeile);                { Zeile mit Virusaufruf überlesen }
  52.     If Open("ram:Startup-Sequence.copy",F2) then Begin       { Neue Startup- }
  53.       While Not EOF(F) do Begin                       { Sequence in   }
  54.         Readln(F,Zeile);                               { RAM-DISK      }
  55.         Writeln(F2,zeile);
  56.       End;
  57.       Close(F2);
  58.     End Else Begin
  59.       Exit(20);
  60.     End;
  61.     Close(F);
  62.   End Else Begin
  63.     Write("Kann Startup-Sequence nich öffnen\n");
  64.     Exit(20);
  65.   End;
  66.  
  67.   If Reopen ("ram:startup-sequence.copy",F) then Begin     { Neue Startup- }
  68.     If Open(StartupPfad,F2) then Begin                 { Sequence auf  }
  69.       While not EOF(F) do Begin                     { Disk          }
  70.         Readln(F,Zeile);
  71.         Writeln(F2,Zeile);
  72.       End;
  73.       Close(F2);
  74.     End;
  75.     Close(F);
  76.   End;
  77.  
  78.   If DeleteFile("ram:startup-sequence.copy") then;
  79.   Write("Virusaufruf aus Startup-Sequence entfernt.\n");
  80. End;
  81.  
  82. Function Checklen : Integer;        { Filelänge überprüfen }
  83. Begin
  84.    F_Lock:=Lock(JeffPfad,shared_lock);
  85.    New(Fib);
  86.    OK:=Examine(F_Lock,Fib);
  87.    Unlock(F_Lock);
  88.    Size := Fib^.Fib_Size;
  89.    Dispose(Fib);
  90.    Checklen:=Size;
  91. end;
  92.  
  93.  
  94. Procedure Check;
  95. Begin
  96.   If Reopen(JeffPfad,F)=TRUE then Begin        { existiert eine Jeff-Datei? }
  97.     If Checklen=2916 then DM:=TRUE;
  98.     Close(F);
  99.   End;
  100.  
  101.   If Reopen(StartupPfad,F) then Begin            { Startup-Sequence }
  102.     Read(F,Zeile);                            { überprüfen       }
  103.     If Streq(Zeile,"    ›A")=TRUE then Startup:=TRUE;
  104.     Close(F);
  105.   End;
  106.  
  107.   If (DM=TRUE) and (Startup=FALSE) then Begin
  108.     If Checklen=2916 then Begin
  109.       Write("Achtung ! Im Verzeichnis c: ist ein verdächtiges File,\n");
  110.       Write("der Virus wird aber nicht in der Startup-Sequence aufgerufen.\n");
  111.       Write("Soll ich das File löschen ? (j/n) ");
  112.       Readln(Antwort);
  113.       If Antwort[0]=Chr(106) then FileLoeschen;
  114.     End;
  115.     Return;
  116.   End;
  117.  
  118.  
  119.   If (DM=TRUE) and (Startup=TRUE) then Begin
  120.     Write("Butonic-JeffV3.00-Virus gefunden. Löschen ? (j/n) ");
  121.     Readln(Antwort);
  122.     If Antwort[0]=Chr(106) then Begin
  123.       FileLoeschen;
  124.       StartupLoeschen;
  125.     End;
  126.     Return;
  127.   End;
  128. End;
  129.  
  130. Procedure ClearVector(v : ^Address);
  131. Begin
  132.   v^:=NIL;        { Vektor löschen }
  133. End;
  134.  
  135.  
  136. Begin
  137.   {$A
  138.     move.l  $4,_ExecPtr
  139.   }
  140.  
  141.   Write("\e[33m\e[1mKillJeff\e[0m V1.0 © 1992 by Andreas Tetzl\n\n");
  142.  
  143.   Zeile:=AllocString(80);
  144.   Device:=AllocString(31);
  145.   Datei:=AllocString(100);
  146.   StartupPfad:=AllocString(49);
  147.   JeffPfad:=AllocString(36);
  148.   
  149.   GetParam(1, Device);
  150.   strcpy(StartupPfad,Device);
  151.   strcat(StartupPfad,"   ");        { Das sind die unsichtbaren Steuerzeichen ! }
  152.   strcpy(JeffPfad,StartupPfad);
  153.   strcat(Device,"s/Startup-Sequence");
  154.   strcpy(StartupPfad,Device);
  155.   Check;
  156.   
  157.   FreeString(Zeile);
  158.   FreeString(Device);
  159.   FreeString(Datei);
  160.   FreeString(StartupPfad);
  161.   FreeString(JeffPfad);
  162.   
  163.   Clearvector(Adr(ExecPtr^.KickTagPtr));
  164.   Clearvector(Adr(ExecPtr^.KickCheckSum));
  165. End.
  166.  
  167.  
  168.  
  169.